package vip.liux.contracts.repositories.identity;

import org.springframework.data.repository.ListCrudRepository;
import org.springframework.data.repository.ListPagingAndSortingRepository;
import org.springframework.data.repository.NoRepositoryBean;
import vip.liux.contracts.models.identity.IdentityRole;

import java.util.Optional;

/**
 * 身份角色仓库接口，提供对身份角色的增删改查操作。
 */
@NoRepositoryBean
public interface IdentityRoleRepository extends ListPagingAndSortingRepository<IdentityRole, Long>, ListCrudRepository<IdentityRole, Long> {

    /**
     * 设置角色的规范化名称。
     *
     * @param role       角色对象
     * @param normalized 规范化名称
     */
    default void setNormalizedRoleName(IdentityRole role, String normalized) {
        role.setNormalizedName(normalized);
    }

    /**
     * 根据名称或规范化名称查找角色。
     *
     * @param name 角色名称
     * @return 包含角色的可选对象
     */
    Optional<IdentityRole> findByNameOrNormalizedName(String name);

    /**
     * 获取角色的名称。
     *
     * @param role 角色对象
     * @return 角色名称
     */
    default String getRoleName(IdentityRole role) {
        return role.getName();
    }

    /**
     * 设置角色的名称并保存。
     *
     * @param role     角色对象
     * @param roleName 角色名称
     */
    default void setRoleName(IdentityRole role, String roleName) {
        role.setName(roleName);
        save(role);
    }

    /**
     * 获取角色的 ID。
     *
     * @param role 角色对象
     * @return 角色 ID 的字符串表示，如果 ID 为空则返回 null
     */
    default String getRoleId(IdentityRole role) {
        return Optional.ofNullable(role.getId()).map(String::valueOf).orElse(null);
    }
}